program random_variables;

class test_randc;
    // randc: 周期性随机变量, 在一个周期内, 所有可能的值都会被随机地、不重复地访问一次. 
    // 保证在一个周期内覆盖所有值
    randc bit [1:0] randc_var;
endclass

class test_rand;
    // rand: 标准随机变量, 在每次随机化时, 会从其取值范围内随机选择一个值.
    rand bit [1:0] rand_var;
endclass

initial begin
    test_randc t1 = new();
    test_rand t2 = new();
    integer i;
    $display("-- Start of test randc --");
    for (i = 0; i < 5; i++) begin
        // randomize the object variables
        if (t1.randomize() == 1) begin
            $display("randc: %0d", t1.randc_var);
        end else begin
            $display("Failed to randomize");
        end
    end
    $display("-- End of test randc --");

    $display("-- Start of test rand --");
    for (i = 0; i < 5; i++) begin
        if (t2.randomize() == 1) begin
            $display("rand: %0d", t2.rand_var);
        end else begin
            $display("Failed to randomize");
        end
    end
    $display("-- End of test rand --");
end

endprogram
